const { app, BrowserWindow,  Menu, ipcMain } = require('electron/main')
const path = require('node:path')
const udpServer = require('./udp/udp_server');
const os = require('node:os');

let mainWindow = null;


function getIPAddress() {
    const networkInterfaces = os.networkInterfaces();
    let ipAddress;
 
    Object.keys(networkInterfaces).forEach((iface) => {
        networkInterfaces[iface].forEach((alias) => {
            if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
                ipAddress = alias.address;
            }
        });
    });
 
    return ipAddress;
}

const createWindow = () => {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      // contextIsolation: false, // 启用上下文隔离
      // nodeIntegration: true, // 禁用 Node.js 集成
      // sandbox: true // 启用沙箱模式
    }
  })

  const menu = Menu.buildFromTemplate([
    {
      label: app.name,
      submenu: [
        {
          click: () => mainWindow.webContents.send('update-counter', 1),
          label: 'Increment'
        },
        {
          click: () => mainWindow.webContents.send('update-counter', -1),
          label: 'Decrement'
        }
      ]
    }

  ])

  Menu.setApplicationMenu(menu)

  mainWindow.loadFile('map.html')

  mainWindow.webContents.openDevTools()
}

app.whenReady().then(async () => {

  createWindow()

  try {

    const ip = getIPAddress();
    console.log(`Current IP Address: ${ip}`);

    await udpServer.start(3000, ip);
    console.log('UDP 服务器已启动');


    udpServer.on('connect', (info) => {
      console.log('UDP 客户端连接:', info.client.ip, info.client.port);
      // 可以在这里处理连接事件
    });
    
    // 监听 UDP 消息并通过 IPC 转发到渲染进程
    udpServer.on('message', (data) => {
      console.log('接收到 UDP 消息:', data);
    });

    // 监听 UDP 服务器错误并转发
    udpServer.on('error', (err) => {
      console.error('UDP 服务器错误:', err);
    });
  } catch (err) {
    console.error('启动 UDP 服务器失败:', err);
  }

  ipcMain.handle('ping', () => 'pong')

  ipcMain.on('counter-value', (_event, value) => {
    console.log(value) // will print value to Node console
  })

  ipcMain.on('map-click', (event, data) => {
    console.log('地图点击坐标：', data.lng, data.lat);
    // 可在此处处理业务逻辑（如保存到数据库、触发其他操作）
  });

  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow()
    }
  })
})

// 应用退出时关闭 UDP 服务器
app.on('before-quit', async () => {
  await udpServer.close();
});

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})
